/**
 * 格式化时间戳
 *
 * @param {Number} ts 时间戳，仅支持传入的时间戳是10位或者13位
 * @param {String} formatType 输出格式
 * @param {Boolean}  isCN 是否显示中文简体
 * @param {String} concat 连接符
 *
 * @return {String} 格式化文本
 */
export function formatTimestamp(ts, formatType, isCN = false, concat = '-') {
  // if (isNaN(ts)) return '无效时间'

  let result = ''
  // const _ts = String(ts).length == 13 ? new Date(ts) : new Date(ts * 1000) // 默认传进来的是10位数时间戳
  const _ts = new Date(ts) // 默认传进来的是yyyy-MM-dd HH:mm:ss

  const year = _ts.getFullYear()
  const month = (_ts.getMonth() + 1) < 10 ? '0' + (_ts.getMonth() + 1) : `${_ts.getMonth() + 1}`
  const date = (_ts.getDate()) < 10 ? '0' + _ts.getDate() : `${_ts.getDate()}`

  const hour = `${_ts.getHours() < 10 ? '0' : ''}${_ts.getHours()}`
  const minute = `${_ts.getMinutes() < 10 ? '0' : ''}${_ts.getMinutes()}`
  const second = `${_ts.getSeconds() < 10 ? '0' : ''}${_ts.getSeconds()}`

  switch (formatType) {
    case 'onlyDate':
      // 显示年、月、日
      if (isCN) {
        result = `${year}年${month}月${date}日`
      } else {
        result = `${year}${concat}${month}${concat}${date}`
      }
      break
    case 'month':
      // 显示年、月
      if (isCN) {
        result = `${year}年${month}月`
      } else {
        result = `${year}${concat}${month}`
      }
      break
    case 'minute':
      // 显示年、月、日、时、分
      if (isCN) {
        result = `${year}年${month}月${date}日  ${hour}时${minute}分`
      } else {
        result = `${year}${concat}${month}${concat}${date} ${hour}:${minute}`
      }
      break
    case 'onlyTime':
      // 显示时、分、秒
      if (isCN) {
        result = `${year}年${month}月${date}日  ${hour}时${minute}分${second}秒`
      } else {
        result = `${year}${concat}${month}${concat}${date} ${hour}:${minute}:${second}`
      }
      break
    case 'getHouseMin':
      // 显示时、分
      if (isCN) {
        result = `${hour}时${minute}分`
      } else {
        result = `${hour}:${minute}`
      }
      break
    default:
      // 默认显示年、月、日、时、分、秒
      if (isCN) {
        result = `${year}年${month}月${date}日 ${hour}时${minute}分${second}秒`
      } else {
        result = `${year}${concat}${month}${concat}${date} ${hour}:${minute}:${second}`
      }
      break
  }

  // console.log(result)
  return result
}
export function formatTimestampTime(ts, formatType, isCN = false, concat = '-') {
  // if (isNaN(ts)) return '无效时间'

  let result = ''
  const _ts = String(ts).length == 13 ? new Date(ts) : new Date(ts * 1000) // 默认传进来的是10位数时间戳
  // const _ts = new Date(ts) // 默认传进来的是10位数时间戳

  const year = _ts.getFullYear()
  const month = (_ts.getMonth() + 1) < 10 ? '0' + (_ts.getMonth() + 1) : `${_ts.getMonth() + 1}`
  const date = (_ts.getDate()) < 10 ? '0' + _ts.getDate() : `${_ts.getDate()}`

  const hour = `${_ts.getHours() < 10 ? '0' : ''}${_ts.getHours()}`
  const minute = `${_ts.getMinutes() < 10 ? '0' : ''}${_ts.getMinutes()}`
  const second = `${_ts.getSeconds() < 10 ? '0' : ''}${_ts.getSeconds()}`

  switch (formatType) {
    case 'onlyDate':
      // 显示年、月、日
      if (isCN) {
        result = `${year}年${month}月${date}日`
      } else {
        result = `${year}${concat}${month}${concat}${date}`
      }
      break
    case 'month':
      // 显示年、月
      if (isCN) {
        result = `${year}年${month}月`
      } else {
        result = `${year}${concat}${month}`
      }
      break
    case 'minute':
      // 显示年、月、日、时、分
      if (isCN) {
        result = `${year}年${month}月${date}日  ${hour}时${minute}分`
      } else {
        result = `${year}${concat}${month}${concat}${date} ${hour}:${minute}`
      }
      break
    case 'onlyTime':
      // 显示时、分、秒
      if (isCN) {
        result = `${year}年${month}月${date}日  ${hour}时${minute}分${second}秒`
      } else {
        result = `${year}${concat}${month}${concat}${date} ${hour}:${minute}:${second}`
      }
      break
    case 'getHouseMin':
      // 显示时、分
      if (isCN) {
        result = `${hour}时${minute}分`
      } else {
        result = `${hour}:${minute}`
      }
      break
    default:
      // 默认显示年、月、日、时、分、秒
      if (isCN) {
        result = `${year}年${month}月${date}日 ${hour}时${minute}分${second}秒`
      } else {
        result = `${year}${concat}${month}${concat}${date} ${hour}:${minute}:${second}`
      }
      break
  }

  // console.log(result)
  return result
}

/**
* 获取当天时间
 */
export function getTodayStartTimestamp() {
  const now = new Date();
  const endDate = new Date();
  now.setHours(0, 0, 0, 0);
  endDate.setHours(23, 59, 59, 999);
  let start = formatTimestampTime(now.getTime(), "onlyTime");
  let end = formatTimestampTime(endDate.getTime(), "onlyTime");
  return [start, end];
}
/**
 * 获取本周的开始时间戳（周一 00:00:00）
 * @returns {number} 毫秒级时间戳
 */
function getWeekStartTimestamp() {
  const now = new Date();
  const day = now.getDay();
  const diff = (day + 6) % 7;
  const weekStart = new Date(now);
  weekStart.setDate(now.getDate() - diff);
  weekStart.setHours(0, 0, 0, 0);
  return weekStart.getTime();
}
/**
* 获取本周的结束时间戳（周日 23:59:59）
* @returns {number} 毫秒级时间戳
*/
function getWeekEndTimestamp() {
  const weekStart = new Date(getWeekStartTimestamp());
  const weekEnd = new Date(weekStart);
  weekEnd.setDate(weekStart.getDate() + 6);
  weekEnd.setHours(23, 59, 59, 999);
  return weekEnd.getTime();
}
/**
     * 获取本月时间
     */
export function getWeekList() {
  let start = getWeekStartTimestamp();
  let end = getWeekEndTimestamp();
  let startformate = formatTimestampTime(start, "onlyTime");
  let endformate = formatTimestampTime(end, "onlyTime");
  return [startformate, endformate];
}

/**
     * 获取本月的开始时间戳（1号 00:00:00）
     * @returns {number} 毫秒级时间戳
     */
function getMonthStartTimestamp() {
  const now = new Date();
  const year = now.getFullYear();
  const month = now.getMonth(); // 月份从0开始
  const monthStart = new Date(year, month, 1); // 构造本月1号
  monthStart.setHours(0, 0, 0, 0); // 设置为当天 00:00:00.000
  return monthStart.getTime();
}

/**
 * 获取本月的结束时间戳（最后一天 23:59:59.999）
 * @returns {number} 毫秒级时间戳
 */
function getMonthEndTimestamp() {
  const now = new Date();
  const year = now.getFullYear();
  const month = now.getMonth(); // 月份从0开始
  const nextMonthStart = new Date(year, month + 1, 1); // 构造下个月1号
  const monthEnd = new Date(nextMonthStart.getTime() - 1); // 减去1毫秒，得到上个月最后一天
  return monthEnd.getTime();
}

/**
 * 获取本月时间
 */
export function getMonthList() {
  let start = getMonthStartTimestamp();
  let end = getMonthEndTimestamp();
  let startformate = formatTimestampTime(start, "onlyTime");
  let endformate = formatTimestampTime(end, "onlyTime");
  return [startformate, endformate];
}

/**
 * 获取两年前的时间戳
 * @returns {number} 毫秒级时间戳
 */
export function getTwoYearsAgoTimestamp() {
  const now = new Date();
  const twoYearsAgo = new Date(now);
  twoYearsAgo.setFullYear(now.getFullYear() - 1);
  return twoYearsAgo.getTime();
}

// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), '', true, '')
// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), '', false, '/')

// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'onlyDate', true)
// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'onlyDate', false)

// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'month', true)
// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'month', false)

// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'minute', true)
// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'minute', false)

// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'onlyTime', true)
// formatTimestamp(new Date('2020-9-8 1:1:1').valueOf(), 'onlyTime', false)
